跳到主要内容

异步承诺(Promise)

表示一个可能尚未可用的值。Promise 用于可能跨多个帧挂起的异步操作。

使用 Context:promise 创建一个新的 promise。

方法(Methods)

resolve

resolve(value: T) -> ()

使用给定的值解析 promise。解析后,任何等待该 promise 的挂起协程将在下一帧恢复执行。

function init(self: MyNode, context: Context): boolean
self.loaded = context:promise()
-- Start async load
loadAssetAsync(function(data)
self.loaded:resolve(data)
end)
return true
end

await

await() -> T

挂起当前协程,直到 promise 被解析,然后返回解析后的值。对同一个 promise 多次调用 await 会返回相同的值。

function draw(self: MyNode, renderer: Renderer)
if self.loaded then
local data = self.loaded:await()
if data then
renderer:drawImage(data.image, data.sampler, 'srcOver', 1)
end
end
end

isResolved

isResolved() -> boolean

如果 promise 已被解析,则返回 true。

if self.loaded:isResolved() then
print("Asset loaded!")
end